home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Graphics / GraphicsWorkshop / Source / ImageView.m < prev    next >
Text File  |  1992-05-18  |  3KB  |  136 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import <libc.h>
  5. #import <appkit/PrintInfo.h>
  6. #import <appkit/NXBitmapImageRep.h>
  7. #import <dpsclient/wraps.h>
  8. #import "GraphicApp.h"
  9. #import "gw.h"
  10. #import "ImageView.h"
  11.  
  12. @implementation ImageView
  13.  
  14. - initFrame: (const NXRect *)frameRect withImage: (id)image
  15. {
  16.     NXRect             cacheRect;
  17.  
  18.     [self initFrame: frameRect];
  19.     bitmap = image;
  20.  
  21. #ifdef DEBUG
  22.     fprintf(stderr, "Imaging bitmap to cache...\n");
  23. #endif
  24.     cacheRect.origin.x = cacheRect.origin.y = 0.0;
  25.     cacheRect.size.width = [bitmap pixelsWide];
  26.     cacheRect.size.height = [bitmap pixelsHigh];
  27.     cache = [Window     newContent:     &cacheRect
  28.                     style:         NX_PLAINSTYLE
  29.                     backing:         NX_RETAINED
  30.                     buttonMask:     0
  31.                     defer:         NO];
  32.     [[cache contentView] lockFocus];
  33.     [bitmap draw];
  34.     [[cache contentView] unlockFocus];
  35. #ifdef DEBUG
  36.     fprintf(stderr, "Bitmap was imaged into cache\n");
  37. #endif
  38.     
  39.     return self;
  40. }
  41.  
  42. - free
  43. {
  44.     [cache free];
  45.     [bitmap free];
  46.     return [super free];
  47. }
  48.  
  49. - replaceImageWith: (id)newImage
  50. {
  51.     [bitmap free];
  52.     bitmap = newImage;
  53.     [[cache contentView] lockFocus];
  54.     [bitmap draw];
  55.     [[cache contentView] unlockFocus];
  56.     [self update];
  57. #ifdef DEBUG
  58.     fprintf(stderr, "Image replace and recached.\n");
  59. #endif
  60.     
  61.     return self;
  62. }
  63.  
  64. - placePrintRect:(const NXRect *)aRect offset:(const NXPoint *)location
  65. {
  66.     ((NXPoint *)location)->x = 0.0;
  67.     ((NXPoint *)location)->y = 0.0;
  68.  
  69.     return self;
  70. }
  71.  
  72. - drawSelf: (const NXRect *)rects : (int)rectCount
  73. {
  74.     const NXRect        *rp;
  75.     int                j, gstate;
  76.  
  77.     if (rects == NULL) return self;
  78.  
  79.     if (NXDrawingStatus == NX_DRAWING) {
  80.         gstate = [cache gState];
  81.         for (j = 0; j < rectCount; j++) {
  82.             rp = &(rects[j]);
  83.             PScomposite(NX_X(rp), NX_Y(rp), NX_WIDTH(rp), 
  84.                 NX_HEIGHT(rp), gstate, NX_X(rp), NX_Y(rp), NX_COPY);
  85.         }
  86.     } else if (NXDrawingStatus == NX_PRINTING) {
  87.         float            scale;
  88.         NXRect        printFrame;
  89.         const NXRect    *paperRect = [[NXApp printInfo] paperRect];
  90.         float            pWidth = paperRect->size.width;
  91.         float            pHeight = paperRect->size.height;
  92.         float            iWidth = pWidth - (72.0 * 2);
  93.         float            iHeight = pHeight - (72.0 * 2);
  94.         
  95.         fprintf(stderr, "Printing\n");
  96.         scale = (float)[bitmap pixelsWide] / (float)[bitmap pixelsHigh];
  97.         if (abs(iWidth - [bitmap pixelsWide]) > abs(iHeight - [bitmap pixelsHigh])) {
  98.             scale = iHeight / (float)[bitmap pixelsHigh];
  99.             printFrame.size.height = iHeight;
  100.             printFrame.size.width = (float)[bitmap pixelsWide] * scale;
  101.             printFrame.origin.x = (pWidth / 2.0) - (printFrame.size.width / 2.0);
  102.             printFrame.origin.y = 72.0;
  103.         } else {
  104.             scale = iWidth / (float)[bitmap pixelsWide];
  105.             printFrame.size.height = (float)[bitmap pixelsHigh] * scale;
  106.             printFrame.size.width = iWidth;
  107.             printFrame.origin.x = 72.0;
  108.             printFrame.origin.y = (pHeight / 2.0) - (printFrame.size.height / 2.0);
  109.         }
  110.         fprintf(stderr, "Frame = %f %f %f %f\n", printFrame.origin.x, printFrame.origin.y, printFrame.size.width, printFrame.size.height);
  111.         PSinitclip();
  112.         PSgsave();
  113.         [bitmap drawIn: &printFrame];
  114.         PSgrestore();
  115.         PSsetlinewidth(2.0);
  116.         PSsetgray(0.0);
  117.         PSrectstroke(    printFrame.origin.x, printFrame.origin.y, 
  118.                     printFrame.size.width, printFrame.size.height);
  119.         PSsetlinewidth(1.0);
  120.         PSrectstroke(    printFrame.origin.x - 3.0, printFrame.origin.y - 3.0,
  121.                     printFrame.size.width + 6.0, printFrame.size.height + 6.0);
  122.         PSselectfont("Times-Roman", 12.0);
  123.         PSmoveto(pWidth / 2.0, printFrame.origin.y - 18.0);
  124.         PScshow((char *)[[NXApp mainWindow] title]);
  125.     }
  126.     
  127.     return self;
  128. }
  129.  
  130. - getBitmap
  131. {
  132.     return bitmap;
  133. }
  134.  
  135. @end
  136.